# -*- coding: utf-8 -*-
"""
智慧职教MOOC视频下载器 - 工具模块
包含独立的工具函数和辅助功能
"""

import sys
import argparse
from pathlib import Path
from browser_manager import manual_close_pages
from config import config
from logger import logger
from download_stats import StatisticsManager
import json


def close_browser_pages():
    """独立的关闭浏览器页面工具"""
    logger.info("启动浏览器页面清理工具...")
    manual_close_pages()


def show_config():
    """显示当前配置信息"""
    logger.info("=" * 60)
    logger.info("📋 当前配置信息")
    logger.info("=" * 60)
    
    logger.info(f"🌐 浏览器配置:")
    logger.info(f"   调试端口: {config.CHROME_DEBUG_PORT}")
    logger.info(f"   调试地址: {config.CHROME_DEBUG_ADDRESS}")
    
    logger.info(f"📁 目录配置:")
    logger.info(f"   视频目录: {config.VIDEOS_DIR}")
    logger.info(f"   日志目录: {config.LOGS_DIR}")
    logger.info(f"   配置目录: {config.CONFIG_DIR}")
    
    logger.info(f"⚙️ 下载配置:")
    logger.info(f"   最大重试次数: {config.MAX_DOWNLOAD_RETRIES}")
    logger.info(f"   页面加载超时: {config.PAGE_LOAD_TIMEOUT}秒")
    logger.info(f"   视频加载超时: {config.VIDEO_LOAD_TIMEOUT}秒")
    logger.info(f"   最小文件大小: {config.MIN_FILE_SIZE}字节")
    
    logger.info(f"🎯 处理配置:")
    logger.info(f"   最大连续失败: {config.MAX_CONSECUTIVE_FAILURES}")
    logger.info(f"   完成率阈值: {config.COMPLETION_RATE_THRESHOLD}")
    
    if hasattr(config, 'ENABLE_PARALLEL_PROCESSING'):
        logger.info(f"⚡ 并发配置:")
        logger.info(f"   并发处理: {'启用' if config.ENABLE_PARALLEL_PROCESSING else '禁用'}")
        logger.info(f"   最大并发下载: {config.MAX_CONCURRENT_DOWNLOADS}")


def update_config():
    """交互式更新配置"""
    logger.info("🛠️ 配置更新工具")
    logger.info("=" * 60)
    
    try:
        print("\n请选择要更新的配置项:")
        print("1. Chrome调试端口")
        print("2. 页面加载超时")
        print("3. 最大重试次数")
        print("4. 保存并退出")
        
        choice = input("请输入选择 (1-4): ").strip()
        
        if choice == '1':
            port = input(f"当前端口: {config.CHROME_DEBUG_PORT}, 请输入新端口: ").strip()
            if port.isdigit():
                config.CHROME_DEBUG_PORT = int(port)
                config.CHROME_DEBUG_ADDRESS = f"127.0.0.1:{port}"
                logger.success(f"Chrome调试端口已更新为: {port}")
            else:
                logger.error("无效的端口号")
                
        elif choice == '2':
            timeout = input(f"当前超时: {config.PAGE_LOAD_TIMEOUT}秒, 请输入新超时: ").strip()
            if timeout.isdigit():
                config.PAGE_LOAD_TIMEOUT = int(timeout)
                logger.success(f"页面加载超时已更新为: {timeout}秒")
            else:
                logger.error("无效的超时值")
                
        elif choice == '3':
            retries = input(f"当前重试次数: {config.MAX_DOWNLOAD_RETRIES}, 请输入新重试次数: ").strip()
            if retries.isdigit():
                config.MAX_DOWNLOAD_RETRIES = int(retries)
                logger.success(f"最大重试次数已更新为: {retries}")
            else:
                logger.error("无效的重试次数")
                
        elif choice == '4':
            config.save_user_config()
            logger.success("配置已保存")
        else:
            logger.error("无效的选择")
            
    except KeyboardInterrupt:
        logger.info("配置更新已取消")
    except Exception as e:
        logger.error(f"配置更新失败: {e}")


def analyze_reports():
    """分析历史报告"""
    reports_dir = Path("reports")
    
    if not reports_dir.exists():
        logger.warning("未找到报告目录")
        return
    
    report_files = list(reports_dir.glob("mooc_download_report_*.json"))
    
    if not report_files:
        logger.warning("未找到任何报告文件")
        return
    
    logger.info(f"📊 找到 {len(report_files)} 个报告文件")
    logger.info("=" * 60)
    
    # 显示最近的几个报告
    sorted_files = sorted(report_files, key=lambda x: x.stat().st_mtime, reverse=True)
    
    for i, report_file in enumerate(sorted_files[:5], 1):
        try:
            with open(report_file, 'r', encoding='utf-8') as f:
                data = json.load(f)
            
            summary = data.get('summary', {})
            session = summary.get('session_info', {})
            course_stats = summary.get('course_stats', {})
            video_stats = summary.get('video_stats', {})
            
            logger.info(f"{i}. {report_file.name}")
            logger.info(f"   时间: {session.get('start_time', '未知')[:19]}")
            logger.info(f"   课程: {course_stats.get('successful_courses', 0)}/{course_stats.get('total_courses', 0)}")
            logger.info(f"   视频: {video_stats.get('downloaded_videos', 0)}/{video_stats.get('total_videos', 0)}")
            logger.info(f"   成功率: {video_stats.get('overall_success_rate', 0):.1%}")
            
        except Exception as e:
            logger.warning(f"读取报告文件失败: {report_file.name} - {e}")


def cleanup_old_logs():
    """清理旧日志文件"""
    logs_dir = Path("logs")
    
    if not logs_dir.exists():
        logger.info("日志目录不存在，无需清理")
        return
    
    log_files = list(logs_dir.glob("*.log"))
    
    if not log_files:
        logger.info("未找到日志文件")
        return
    
    # 保留最近7天的日志
    import time
    from datetime import datetime, timedelta
    
    cutoff_time = datetime.now() - timedelta(days=7)
    cutoff_timestamp = cutoff_time.timestamp()
    
    old_files = []
    for log_file in log_files:
        if log_file.stat().st_mtime < cutoff_timestamp:
            old_files.append(log_file)
    
    if not old_files:
        logger.info("没有需要清理的旧日志文件")
        return
    
    logger.info(f"找到 {len(old_files)} 个旧日志文件")
    
    try:
        confirm = input("是否删除这些文件? (y/N): ").strip().lower()
        if confirm in ['y', 'yes']:
            for log_file in old_files:
                log_file.unlink()
                logger.debug(f"已删除: {log_file.name}")
            logger.success(f"已删除 {len(old_files)} 个旧日志文件")
        else:
            logger.info("清理已取消")
    except KeyboardInterrupt:
        logger.info("清理已取消")


def main():
    """主函数 - 提供命令行工具"""
    parser = argparse.ArgumentParser(description="智慧职教MOOC下载器工具")
    parser.add_argument('--clean-pages', action='store_true', help='清理浏览器页面')
    parser.add_argument('--show-config', action='store_true', help='显示当前配置')
    parser.add_argument('--update-config', action='store_true', help='更新配置')
    parser.add_argument('--analyze-reports', action='store_true', help='分析历史报告')
    parser.add_argument('--cleanup-logs', action='store_true', help='清理旧日志文件')
    
    args = parser.parse_args()
    
    if args.clean_pages:
        close_browser_pages()
    elif args.show_config:
        show_config()
    elif args.update_config:
        update_config()
    elif args.analyze_reports:
        analyze_reports()
    elif args.cleanup_logs:
        cleanup_old_logs()
    else:
        # 默认行为：清理浏览器页面
        close_browser_pages()


if __name__ == "__main__":
    main() 